package com.svh.Controlador;

import com.svh.Entidad.Empleado;
import com.svh.Entidad.Local;
import com.svh.Entidad.Usuario;
import com.svh.Servicios.LocalServicio;
import com.svh.Servicios.LoginServicio;
import com.svh.Utils.Utilitario;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author David
 */
@ManagedBean(name = "loginControlador")
@RequestScoped
public class LoginControlador {

    private LoginServicio loginServicio;
    private LocalServicio localServicio;
    private Usuario user;
    private Empleado empleado;
    private Local local;
    private List<Local> locales;
    private SesionControlador sesion;

    public LoginControlador() {
        user = new Usuario();
        local = new Local();
        localServicio = new LocalServicio();
        locales = localServicio.obtenerLocales();
    }

    public String login() {
        loginServicio = new LoginServicio();
        if (!esVistaValida()) {
            return "";
        }
        if (!loginServicio.esValido(user)) {
            return "";
        }
        user = loginServicio.crearUsuarioSesion(user, empleado);
        empleado = user.getEmpleado();
        sesion = new SesionControlador();
        sesion.setUsuario(user);
        sesion.setEmpleado(empleado);
        sesion.ensamblarMenu();
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("sesionControlador", sesion);
        return "views/home?faces-redirect=true";
    }

    public String logout() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
        if (session != null) {
            session.invalidate();
        }
        return "salir";
    }

    /**
     * Validaciones de la Vista *
     */
    private boolean esVistaValida() {
        if (!esNickValido()) {
            return false;
        }
        if (!esClaveValida()) {
            return false;
        }
        return true;
    }

    private boolean esNickValido() {
        if (Utilitario.esNulo(getUser().getNick())) {
            Utilitario.enviarMensajeGlobalError("Debe ingresar el usuario");
            return false;
        } else if (!Utilitario.esRangoValido(getUser().getNick(), 20)) {
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres del Usuario es 20");
            return false;
        }
        return true;
    }

    private boolean esClaveValida() {
        if (Utilitario.esNulo(getUser().getClave())) {
            Utilitario.enviarMensajeGlobalError("Debe ingresar la clave");
            return false;
        } else if (!Utilitario.esRangoValido(getUser().getClave(), 20)) {
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres de la Clave es 20");
            return false;
        }
        return true;
    }

    /**
     * GETTERS AND SETTERS *
     */
    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    public void setSesion(SesionControlador sesion) {
        this.sesion = sesion;
    }

    public Local getLocal() {
        return local;
    }

    public void setLocal(Local local) {
        this.local = local;
    }

    public List<Local> getLocales() {
        return locales;
    }

    public void setLocales(List<Local> locales) {
        this.locales = locales;
    }

}
